// 金融领域提示词模板系统
export interface FinancialPromptTemplate {
  topic: string;
  template: string;
  requiredMetrics: string[];
  qualityCriteria: string[];
}

// 金融话题分类
export enum FinancialTopic {
  STOCK_ANALYSIS = 'stockAnalysis',
  INVESTMENT_STRATEGY = 'investmentStrategy', 
  RISK_ASSESSMENT = 'riskAssessment',
  FINANCIAL_PLANNING = 'financialPlanning',
  MARKET_TREND = 'marketTrend',
  PORTFOLIO_MANAGEMENT = 'portfolioManagement'
}

// 金融专业知识图谱
export const FINANCIAL_KNOWLEDGE_GRAPH = {
  [FinancialTopic.STOCK_ANALYSIS]: {
    keyMetrics: ['市盈率', '市净率', '股息率', 'ROE', '营收增长率', '净利润增长率'],
    analysisFramework: ['基本面分析', '技术面分析', '行业分析', '估值分析'],
    dataSources: ['财务报表', '行业报告', '市场数据', '宏观经济指标']
  },
  [FinancialTopic.INVESTMENT_STRATEGY]: {
    keyMetrics: ['风险偏好', '投资期限', '预期收益率', '最大回撤容忍度'],
    analysisFramework: ['资产配置', '风险分散', '投资组合优化', '再平衡策略'],
    dataSources: ['历史收益率', '风险指标', '相关性分析', '市场预期']
  },
  [FinancialTopic.RISK_ASSESSMENT]: {
    keyMetrics: ['波动率', '夏普比率', '最大回撤', 'VAR值', '信用评级'],
    analysisFramework: ['风险识别', '风险评估', '风险控制', '风险监测'],
    dataSources: ['历史波动率', '信用评级', '流动性指标', '压力测试']
  },
  [FinancialTopic.FINANCIAL_PLANNING]: {
    keyMetrics: ['现金流', '资产负债率', '储蓄率', '投资回报率', '退休目标'],
    analysisFramework: ['目标设定', '现状分析', '方案制定', '执行监控'],
    dataSources: ['收支记录', '资产清单', '负债情况', '未来规划']
  }
};

// 提示词模板库
export const PROMPT_TEMPLATES: Record<FinancialTopic, FinancialPromptTemplate> = {
  [FinancialTopic.STOCK_ANALYSIS]: {
    topic: '股票分析',
    template: `作为专业金融分析师，请对{stockName}进行全面的投资价值分析。

请按照以下框架进行分析：
1. 基本面分析：包括财务指标（市盈率、市净率、ROE等）、盈利能力、成长性
2. 技术面分析：价格走势、成交量、技术指标
3. 行业分析：行业地位、竞争格局、发展前景
4. 估值分析：合理估值区间、投资建议

要求：
- 提供具体数据支撑
- 分析要客观全面
- 给出明确的风险提示
- 建议要具有可操作性`,
    requiredMetrics: ['市盈率', '市净率', 'ROE', '营收增长率', '净利润增长率'],
    qualityCriteria: ['数据准确性', '分析深度', '风险提示', '可操作性']
  },
  [FinancialTopic.INVESTMENT_STRATEGY]: {
    topic: '投资策略',
    template: `作为专业投资顾问，请为{riskProfile}风险偏好的投资者制定投资策略。

投资目标：{investmentGoal}
投资期限：{timeHorizon}

请提供：
1. 资产配置建议（股票、债券、现金等比例）
2. 具体投资标的推荐
3. 风险管理措施
4. 定期调整策略

要求：
- 策略要符合风险偏好
- 提供历史回测数据
- 考虑市场环境因素
- 给出明确的执行步骤`,
    requiredMetrics: ['预期收益率', '最大回撤', '夏普比率', '资产相关性'],
    qualityCriteria: ['风险匹配度', '历史表现', '适应性', '执行可行性']
  },
  [FinancialTopic.RISK_ASSESSMENT]: {
    topic: '风险评估',
    template: `作为专业风险评估师，请对{investmentTarget}进行全面的风险评估。

评估维度：
1. 市场风险：价格波动、系统性风险
2. 信用风险：违约概率、信用评级
3. 流动性风险：变现能力、交易成本
4. 操作风险：管理风险、技术风险

要求：
- 使用量化风险评估方法
- 提供风险等级评分
- 给出风险控制建议
- 考虑极端市场情况`,
    requiredMetrics: ['波动率', 'VAR值', '最大回撤', '信用评级'],
    qualityCriteria: ['量化程度', '全面性', '实用性', '前瞻性']
  },
  [FinancialTopic.FINANCIAL_PLANNING]: {
    topic: '财务规划',
    template: `作为专业财务规划师，请为{clientProfile}制定个性化的财务规划方案。

当前财务状况：{currentSituation}
财务目标：{financialGoals}

规划内容：
1. 现金流管理：收入支出优化
2. 资产配置：投资组合建议
3. 风险管理：保险规划
4. 税务优化：合理避税策略

要求：
- 方案要个性化定制
- 考虑生命周期阶段
- 提供具体执行计划
- 包含定期评估机制`,
    requiredMetrics: ['现金流', '资产负债率', '储蓄率', '投资回报率'],
    qualityCriteria: ['个性化程度', '全面性', '可执行性', '长期性']
  }
};

// 话题检测函数
export function detectFinancialTopic(userInput: string): FinancialTopic | null {
  const topicKeywords: Record<FinancialTopic, string[]> = {
    [FinancialTopic.STOCK_ANALYSIS]: ['股票', '股价', '市盈率', '市净率', '财报', '估值'],
    [FinancialTopic.INVESTMENT_STRATEGY]: ['投资', '策略', '组合', '配置', '资产', '收益'],
    [FinancialTopic.RISK_ASSESSMENT]: ['风险', '评估', '波动', '回撤', '安全', '稳健'],
    [FinancialTopic.FINANCIAL_PLANNING]: ['财务', '规划', '理财', '储蓄', '退休', '税务'],
    [FinancialTopic.MARKET_TREND]: ['市场', '趋势', '行情', '预测', '宏观', '经济'],
    [FinancialTopic.PORTFOLIO_MANAGEMENT]: ['组合', '管理', '优化', '再平衡', '分散']
  };

  for (const [topic, keywords] of Object.entries(topicKeywords)) {
    if (keywords.some(keyword => userInput.includes(keyword))) {
      return topic as FinancialTopic;
    }
  }
  
  return null;
}

// 提示词生成器
export function generateFinancialPrompt(topic: FinancialTopic, context: Record<string, string> = {}): string {
  const template = PROMPT_TEMPLATES[topic];
  if (!template) return '';

  let prompt = template.template;
  
  // 替换模板中的变量
  Object.entries(context).forEach(([key, value]) => {
    prompt = prompt.replace(new RegExp(`{${key}}`, 'g'), value);
  });
  
  return prompt;
}

// 质量评分函数
export function assessAnswerQuality(answer: string, topic: FinancialTopic): {
  score: number;
  feedback: string[];
  needsFollowUp: boolean;
} {
  const template = PROMPT_TEMPLATES[topic];
  if (!template) {
    return { score: 0, feedback: ['无法评估该话题的回答质量'], needsFollowUp: false };
  }

  const feedback: string[] = [];
  let score = 0;
  let criteriaMet = 0;

  // 检查是否包含必要指标
  template.requiredMetrics.forEach(metric => {
    if (answer.includes(metric)) {
      criteriaMet++;
      score += 20;
    } else {
      feedback.push(`缺少${metric}相关分析`);
    }
  });

  // 检查数据支撑
  const hasDataSupport = /\d+(\.\d+)?%?/.test(answer) || 
                        answer.includes('数据') || 
                        answer.includes('统计') || 
                        answer.includes('报告');
  
  if (hasDataSupport) {
    criteriaMet++;
    score += 20;
  } else {
    feedback.push('回答缺乏具体数据支撑');
  }

  // 检查分析深度
  const analysisDepth = (answer.match(/\n/g) || []).length > 5;
  if (analysisDepth) {
    criteriaMet++;
    score += 20;
  } else {
    feedback.push('分析深度不足，建议提供更详细的分析');
  }

  const needsFollowUp = criteriaMet < template.requiredMetrics.length / 2;
  
  return {
    score: Math.min(100, score),
    feedback,
    needsFollowUp
  };
}

// 自动追问生成器
export function generateFollowUpQuestion(topic: FinancialTopic, missingMetrics: string[]): string {
  const knowledge = FINANCIAL_KNOWLEDGE_GRAPH[topic];
  if (!knowledge) return '请提供更详细的信息以便进行专业分析。';

  if (missingMetrics.length > 0) {
    return `为了更好地进行${PROMPT_TEMPLATES[topic]?.topic || '专业'}分析，请提供以下信息：${missingMetrics.join('、')}相关的具体数据或情况。`;
  }

  return `为了提供更精准的分析，能否分享更多关于${knowledge.keyMetrics.slice(0, 3).join('、')}的信息？`;
}